package com.wjm.thread.test1;

public class MyRunnable implements Runnable {
    private int ticketCount = 50;// 总的票数，这个是共享资源，多个线程都会访问
    Object mutex = new Object();// 锁，自己定义的，或者使用实例的锁

    @Override
    public void run() {
        while (ticketCount > 0) {// 循环是指线程不停的去卖票
            sellTicket();
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println("run..." + Thread.currentThread().getId() + ":" + Thread.currentThread().getName() + "票已经卖完！");
    }

    private void sellTicket() {
        synchronized (mutex) {// 当操作的是共享数据时,
            // 用同步代码块进行包围起来,执行里面的代码需要mutex的锁，但是mutex只有一个锁。这样在执行时,只能有一个线程执行同步代码块里面的内容
//            if (ticketCount > 0) {
                ticketCount--;
                System.out.println("run..." + Thread.currentThread().getId() + ":" + Thread.currentThread().getName() + "正在卖票,还剩" + ticketCount + "张票");
//            }
        }
    }
}
